<!DOCTYPE html>
<html>
  <head lang="en">
    <meta charset="UTF-8" />
    <title>Conditional native lazy loading - Lazyload demos</title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style>
      ul,
      li {
        list-style-type: none;
        margin: 0;
        padding: 0;
      }

      a,
      img {
        display: block;
      }

      img {
        border: 0;
        width: 220px;
        height: 280px;
      }

      img:not([src]) {
        visibility: hidden;
      }

      .warning {
        padding: 1em;
        color: black;
        background: lightyellow;
        border-radius: 1em;
        border: 1px solid gray;
      }

      /* Fixes Firefox anomaly during image load */
      @-moz-document url-prefix() {
        img:-moz-loading {
          visibility: hidden;
        }
      }
    </style>
  </head>

  <body>
    <h1>Conditional native lazy loading demo</h1>
    <h2>Images</h2>
    <div id="results1" class="results">
      <ul>
        <li>
          <a href="#/it/donna/stivaletti_cod44721746jj.html"
            ><img alt="Stivaletti" loading="eager" src=./images/440x560-01.webp width="220"
            height="280" /></a
          >
        </li>
        <li>
          <a href="#/it/donna/open-toe_cod44740806jx.html"
            ><img alt="Open toe" loading="eager" src=./images/440x560-02.webp width="220"
            height="280" /></a
          >
        </li>
        <li>
          <a href="#/it/donna/sneakers-tennis-shoes-basse_cod44735977gr.html"
            ><img alt="Sneakers &amp; Tennis" class="lazy" data-src=./images/440x560-03.webp
            width="220" height="280" /></a
          >
        </li>
        <li>
          <a href="#/it/donna/sneakers-tennis-shoes-basse_cod44738717am.html"
            ><img alt="Sneakers &amp; Tennis shoes basse" class="lazy"
            data-src=./images/440x560-04.webp width="220" height="280" /></a
          >
        </li>
        <li>
          <a href="#/it/donna/sneakers-tennis-shoes-alte_cod44739940cb.html"
            ><img alt="Sneakers &amp; Tennis shoes alte" class="lazy"
            data-src=./images/440x560-05.webp width="220" height="280" /></a
          >
        </li>
        <li>
          <a href="#/it/donna/sneakers-tennis-shoes-alte_cod44740860xg.html"
            ><img alt="Sneakers &amp; Tennis shoes alte" class="lazy"
            data-src=./images/440x560-06.webp width="220" height="280" /></a
          >
        </li>
        <li>
          <a href="#/it/donna/sneakers-tennis-shoes-basse_cod44738719vn.html"
            ><img alt="Sneakers &amp; Tennis shoes basse" class="lazy"
            data-src=./images/440x560-07.webp width="220" height="280" /></a
          >
        </li>
      </ul>
    </div>

    <h2>Iframes</h2>
    <iframe class="lazy" data-src="./iframes/i01.html" frameborder="0"></iframe>
    <iframe class="lazy" data-src="./iframes/i02.html" frameborder="0"></iframe>
    <iframe class="lazy" data-src="./iframes/i03.html" frameborder="0"></iframe>

    <h2>Preload = none</h2>
    <video
      class="lazy"
      controls
      preload="none"
      width="620"
      data-src="./videos/1920x1080-01.mp4"
      data-poster="./videos/1920x1080-01.webp"
    >
      <source type="video/mp4" data-src="./videos/1920x1080-01.mp4" />
      <source type="video/ogg" data-src="./videos/1920x1080-01.ogv" />
      <source type="video/avi" data-src="./videos/1920x1080-01.avi" />
    </video>

    <h2>Preload = metadata</h2>
    <video
      class="lazy"
      preload="metadata"
      controls
      width="620"
      data-src="./videos/1920x1080-02.mp4"
      data-poster="./videos/1920x1080-02.webp"
    >
      <source type="video/mp4" data-src="./videos/1920x1080-02.mp4" />
      <source type="video/ogg" data-src="./videos/1920x1080-02.ogv" />
      <source type="video/avi" data-src="./videos/1920x1080-02.avi" />
    </video>
    <script src="../dist/lazyload.min.js"></script>
    <script>
      (function () {
        function logElementEvent(eventName, element) {
          console.log(Date.now(), eventName, element.getAttribute("data-src"));
        }

        var callback_enter = function (element) {
          logElementEvent("🔑 ENTERED", element);
        };
        var callback_exit = function (element) {
          logElementEvent("🚪 EXITED", element);
        };
        var callback_loading = function (element) {
          logElementEvent("⌚ LOADING", element);
        };
        var callback_loaded = function (element) {
          logElementEvent("👍 LOADED", element);
        };
        var callback_error = function (element) {
          logElementEvent("💀 ERROR", element);
          element.src = 'url("./images/440x560-Error.webp")';
        };
        var callback_finish = function () {
          logElementEvent("✔️ FINISHED", document.documentElement);
        };
        var callback_cancel = function (element) {
          logElementEvent("🔥 CANCEL", element);
        };

        function supportsNativeLazyVideo() {
          return "loading" in HTMLVideoElement.prototype;
        }

        // Single instance using native lazy loading on images, videos and iframes
        function createSingleInstance() {
          var lazyAll = new LazyLoad({
            use_native: true,
            // NOTICE: they won't be called since the loading will be native
            callback_enter: callback_enter,
            callback_exit: callback_exit,
            callback_cancel: callback_cancel,
            callback_loading: callback_loading,
            callback_loaded: callback_loaded,
            callback_error: callback_error,
            callback_finish: callback_finish
          });
        }

        // Double instance using native lazy loading on images and iframes,
        // and JS driven lazy loading on videos
        function createDoubleInstance() {
          var lazyImgsIframes = new LazyLoad({
            elements_selector: "img.lazy, iframe.lazy",
            use_native: true,
            // Assign the callbacks defined above
            // NOTICE: they won't all called since the loading will be native
            callback_enter: callback_enter,
            callback_exit: callback_exit,
            callback_cancel: callback_cancel,
            callback_loading: callback_loading,
            callback_loaded: callback_loaded,
            callback_error: callback_error,
            callback_finish: callback_finish
          });
          var lazyVideos = new LazyLoad({
            elements_selector: "video.lazy",
            // Assign the callbacks defined above
            callback_enter: callback_enter,
            callback_exit: callback_exit,
            callback_cancel: callback_cancel,
            callback_loading: callback_loading,
            callback_loaded: callback_loaded,
            callback_error: callback_error,
            callback_finish: callback_finish
          });
        }

        if (supportsNativeLazyVideo()) {
          createSingleInstance();
        } else {
          createDoubleInstance();
        }
      })();
    </script>
  </body>
</html>
